在前兩天,我們介紹了物件的繼承與多型,讓我們可以把相關的類型分類好
但有時候我們需要的父型別可能是一種概念而不是真實存在的,這時候我們可以創建一個只有外殼並沒有實作的內容,我們稱為抽象
interface Drawable {
// 抽象方法,沒有實現
void draw();
}
class Circle implements Drawable {
// 必須實現抽象方法
@Override
public void draw() {
System.out.println("畫一個圓形");
}
}
在上面這個例子中,我們創建了一個名為 Drawable 的抽象類別,並且透過關鍵字implements
來實作這個抽象類別,與使用一般的實體類別不同,若我們的 Drawable 為實體類別那麼必須得先實作 draw() 方法,容易會讓繼承他的物件忽略掉需要覆寫 draw() 方法,然而若是使用抽象類別那麼若我們繼承後的類別沒有實作 draw() 此方法那麼編譯器會報錯,一方面我們可以在代碼中準確地呈現這是一個未定義的內容,一方面也可以確保繼承此物件後需要去實作他,這就是抽象物件的妙處了